﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace BeachRunner.Entity
{
    /// <summary>
    /// Eine Klasse um mehrer Entitys zusammen zu fassen
    /// 
    /// Autor: OLD (Mattis Hänel)
    /// </summary>
    public class EntitySet
    {
        /// <summary>
        /// Die Liste aller im Set enthaltenen Entitys
        /// </summary>
        private LinkedList<Entity> list;

        /// <summary>
        /// Erstellt ein neues EntitySet
        /// </summary>
        public EntitySet()
        {
            list = new LinkedList<Entity>();
        }

        /// <summary>
        /// Fügt ein Entity dem Set hinzu
        /// </summary>
        /// <param name="entity">Das hinzuzufügende Entity</param>
        public void Add(Entity entity)
        {
            list.AddFirst(entity);
        }

        /// <summary>
        /// Entfernt ein Entity aus dem Set
        /// </summary>
        /// <param name="entity">Das zu entfernende Entity</param>
        public void Remove(Entity entity)
        {
            list.Remove(entity);
        }

        /// <summary>
        /// Updatet alle Entitys im Set
        /// </summary>
        public void Update()
        {
            //foreach (NewEntity entity in list)
            //{
            //    entity.Update();
            //}

            LinkedListNode<Entity> node = list.First;
            LinkedListNode<Entity> next;

            while (node != null)
            {
                next = node.Next;

                Entity entity = node.Value;
                entity.Update();

                node = next;
            }
        }

        /// <summary>
        /// Zeichnet alle Entitys im Set
        /// </summary>
        /// <param name="spriteBatch">Das SpriteSet auf dem gezeichnet werden soll.</param>
        /// <param name="offset">Der Offset mit dem gezeichnet werden soll (Scrolling)</param>
        public void Draw( SpriteBatch spriteBatch, Vector2 offset )
        {
            LinkedListNode<Entity> node = list.First;
            LinkedListNode<Entity> next;

            while (node != null)
            {
                next = node.Next;

                Entity entity = node.Value;
                entity.Draw(spriteBatch, offset);

                node = next;
            }
        }
    }
}
